package zsy.test.设计模式.singleton;

/**
 * 双重校验锁实现懒汉式单例
 *
 * @author zhangshuaiyin
 * @date 2022/8/8 10:32
 */
public class DCLSingleton {
    /**
     * volatile: 防止指令重排序
     */
    private static volatile DCLSingleton instance;

    private DCLSingleton() {}

    public static DCLSingleton getInstance() {
        // 如果已经创建过对象，防止获取对象时同步阻塞
        if (instance == null) {
            synchronized (DCLSingleton.class) {
                // 防止未创建对象时阻塞的线程进来，此时其他线程可能已经创建了对象
                if (instance == null) {
                    instance = new DCLSingleton();
                }
            }
        }
        return instance;
    }
}
